package enumdemo;

import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;

public class TestEnumReflect {
    public static void reflectPrivateConstructor() {
        try {
            Class<?> c1 = Class.forName("enumdemo.TestEnum2");

            Constructor<?> constructor = c1.getDeclaredConstructor(int.class,String.class);
//            Constructor<?> constructor = c1.getDeclaredConstructor(int.class,String.class,int.class,String.class);
            constructor.setAccessible(true);

            Object object = constructor.newInstance(666,"绿色");
//            Object object = constructor.newInstance(666,"cat",777,"dog");
            TestEnum2 testEnum2 = (TestEnum2)object;//和下面那行一样
//            TestEnum2 testEnum2 = (TestEnum2)constructor.newInstance(666,"绿色");

            System.out.println("获得枚举的私有构造函数："+testEnum2);


//           获取它的构造方法
        } catch (ClassNotFoundException | NoSuchMethodException e) {
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            e.printStackTrace();
        } catch (InstantiationException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        reflectPrivateConstructor();//error
//        enumdemo.TestEnum2.<init>(int, java.lang.String)
//        错误是     没有这样的构造方法  为什么报错呢
//        因为我们的类(TestEnum2)默认继承Enum      我们自定义的类只有一个带两个参数的构造方法
//        当一个类继承另一个类的时候 我们要先帮助父类构造 隐式在构造方法内有super()


//        当我们再添加两个参数的时候  还是发生报错
//        Cannot reflectively create enum objects   不可以创建反射类型的实例
    }
}
